package cl.alto.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import cl.alto.clases.CalidadAccidentado;
import cl.alto.clases.EstadoCasoSoap;
import cl.alto.clases.Isapre;
import cl.alto.clases.Naturaleza;
import cl.alto.clases.PersonaAccidentada;
import cl.alto.clases.TipoCalle;
import cl.alto.clases.Comuna;
import cl.alto.clases.TipoPrestacionMedica;
import cl.alto.clases.TipoAccidente;
import cl.alto.clases.DenunciaAccidente;
import cl.alto.clases.CausaAccidente;
import cl.alto.clases.MagnitudLesiones;


public class DaoCombos {
    
	public static List<EstadoCasoSoap> getEstadoCasoSoap() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<EstadoCasoSoap> list = new ArrayList<EstadoCasoSoap>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from EstadoCasoSoap";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	EstadoCasoSoap ces = new EstadoCasoSoap();
                int id_ces = rs.getInt("id");
                String nombre_ces = rs.getString("nombre");
                
                ces.setId(id_ces);
                ces.setNombre(nombre_ces);
                list.add(ces);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }
	
	
	public static List<Isapre> getIsapres() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<Isapre> list = new ArrayList<Isapre>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from Isapre";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	Isapre i = new Isapre();
                int id_i = rs.getInt("id");
                String nombre_i = rs.getString("nombre");
                
                i.setId(id_i);
                i.setNombre(nombre_i);
                list.add(i);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }
    

	public static List<Naturaleza> getNaturaleza() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<Naturaleza> list = new ArrayList<Naturaleza>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from Naturaleza";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	Naturaleza n = new Naturaleza();
                int id_n = rs.getInt("id");
                String nombre_n = rs.getString("nombre");
                
                n.setId(id_n);
                n.setNombre(nombre_n);
                list.add(n);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }
	
	
	public static List<PersonaAccidentada> getPersonaAccidentada() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<PersonaAccidentada> list = new ArrayList<PersonaAccidentada>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from PersonaAccidentada";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	PersonaAccidentada pa = new PersonaAccidentada();
                int id_pa = rs.getInt("id");
                String nombre_pa = rs.getString("nombre");
                
                pa.setId(id_pa);
                pa.setNombre(nombre_pa);
                list.add(pa);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }
	
	
	public static List<CalidadAccidentado> getCalidadAccidentado() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<CalidadAccidentado> list = new ArrayList<CalidadAccidentado>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from Calidad";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	CalidadAccidentado ca = new CalidadAccidentado();
                int id_ca = rs.getInt("id");
                String nombre_ca = rs.getString("nombre");
                
                ca.setId(id_ca);
                ca.setNombre(nombre_ca);
                list.add(ca);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }
    

	public static List<TipoCalle> getTipoCalle() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<TipoCalle> list = new ArrayList<TipoCalle>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from TipoCalle";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	TipoCalle tc = new TipoCalle();
                int id_tc = rs.getInt("id");
                String nombre_tc = rs.getString("nombre");
                
                tc.setId(id_tc);
                tc.setNombre(nombre_tc);
                list.add(tc);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }

	
	public static List<Comuna> getComuna() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<Comuna> list = new ArrayList<Comuna>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from Comuna";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	Comuna c = new Comuna();
                int id_c = rs.getInt("id");
                String nombre_c = rs.getString("nombre");
                
                c.setId(id_c);
                c.setNombre(nombre_c);
                list.add(c);
            }
            System.out.println("SELECCIONANDO COMUNAS CON " + sql);
            System.out.println("OBTUVIMOS " + list.size() + " filas de comunas!");
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }


	public static List<TipoPrestacionMedica> getTipoPrestacionMedica() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<TipoPrestacionMedica> list = new ArrayList<TipoPrestacionMedica>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from TipoPrestacionMedica";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	TipoPrestacionMedica tpm = new TipoPrestacionMedica();
                int id_tpm = rs.getInt("id");
                String nombre_tpm = rs.getString("nombre");
                
                tpm.setId(id_tpm);
                tpm.setNombre(nombre_tpm);
                list.add(tpm);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }


	public static List<TipoAccidente> getTipoAccidente() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<TipoAccidente> list = new ArrayList<TipoAccidente>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from TipoAccidente";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	TipoAccidente ta = new TipoAccidente();
                int id_ta = rs.getInt("id");
                String nombre_ta = rs.getString("nombre");
                
                ta.setId(id_ta);
                ta.setNombre(nombre_ta);
                list.add(ta);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }


	public static List<DenunciaAccidente> getDenunciaAccidente() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<DenunciaAccidente> list = new ArrayList<DenunciaAccidente>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from DenunciaAccidente";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	DenunciaAccidente da = new DenunciaAccidente();
                int id_da = rs.getInt("id");
                String nombre_da = rs.getString("nombre");
                
                da.setId(id_da);
                da.setNombre(nombre_da);
                list.add(da);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }



	public static List<CausaAccidente> getCausaAccidente() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<CausaAccidente> list = new ArrayList<CausaAccidente>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from CausaAccidente";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	CausaAccidente ca = new CausaAccidente();
                int id_ca = rs.getInt("id");
                String nombre_ca = rs.getString("nombre");
                
                ca.setId(id_ca);
                ca.setNombre(nombre_ca);
                list.add(ca);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }


	public static List<MagnitudLesiones> getMagnitudLesiones() throws SQLException, Exception{
        Connection cnx = null;
        Statement csmt  = null;
        ResultSet rs = null;
        List<MagnitudLesiones> list = new ArrayList<MagnitudLesiones>();        
        try {
        	cnx = ConexionLoca.getConnection();

            String sql = "select * from MagnitudLesiones";
            csmt = cnx.createStatement();
            rs = csmt.executeQuery(sql);
            while(rs.next()){
            	MagnitudLesiones ml = new MagnitudLesiones();
                int id_ml = rs.getInt("id");
                String nombre_ml = rs.getString("nombre");
                
                ml.setId(id_ml);
                ml.setNombre(nombre_ml);
                list.add(ml);
            }
            return list;
        } catch (SQLException e) {
            //e.printStackTrace();
            throw e;
        } catch (Exception e) {
            //e.printStackTrace();
            throw e;
        } finally {
            destroy(cnx,csmt,rs);
        }
    }

	
    /*ATOMIZABLE Y REUTIZABLE*/
    
    public static void destroy(Connection con, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (final SQLException ee) {
            rs = null;
        }
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (final SQLException ee) {
            stmt = null;
        }
        try {
            if (con != null) {
                con.close();
            }
        } catch (final SQLException ee) {
            con = null;
        }
    }
}
